package test;

import java.lang.reflect.Array;

public class arrays
{
	/** test des umganges mit arrays. **/
	public arrays()
	{

	}
	
	public static void main(String [] args)
	{
		/** =========== ARRAY =========== **/
		/** über ARRAYS:
		 * arrays sind in java (wahrscheinlich aus performance gründen) von der länge her fix.
		 * 
		 */
		// Main mainl = new Main();
		System.out.println("Hello World");
		/** test des umgangs mit arrays. **/
		
		/** deklaration von arrays, sind so noch nicht einsatzbereit, müssen erst initialisiert werden **/
		int[] ARRAY_int;
		double[] ARRAY_double;
		boolean[] ARRAY_boolean;
		String[] ARRAY_strings;
		Object[] ARRAY_objects;
		
		/** initialisierung von arrays, jetzt kann das array eine fixe anzahl von elementen eines bestimmten types aufnehmen **/
		ARRAY_strings = new String[15];
		ARRAY_int = new int[15];
		ARRAY_double = new double[15];
		ARRAY_boolean = new boolean[15];
		ARRAY_objects = new Object[15];
		
		/** man kann natürlich deklarieren & initialisierung gleichzeitig **/
		String[] ARRAY_strings2 = new String[15];

		ARRAY_strings[0] = "ein neuer wert";
		ARRAY_strings[1] = "ein neuer wert";
		
		/** schreibzugriff auf einen teil auserhalb des arrays fehler:
		 * Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 16
				at test.test.main(test.java:32)
			ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2 ["util.c",L765]
			JDWP exit error JVMTI_ERROR_INTERNAL(113): 
		 */
		// ARRAY_strings[16] = "ein neuer wert";
		
		/** in ein array wo objects rein dürfen, dürfen alle möglichen werte rein **/
		ARRAY_objects[0] = "ein string";
		ARRAY_objects[1] = 1; // ein int
		ARRAY_objects[2] = new Object(); // ein weiteres object usw usw....
		ARRAY_objects[3] = new String[10]; // ein weiteres array usw usw....

		/** sog. literale definition eines arrays, die länge ergibt sich automatisch aus der anzahl der zugewiesenen elemente **/
		int[] x = {1,2,3,4,5};
		boolean[] y = {true, true};
		
		/** Array-Index muß vom Typ int sein. Aufgrund der vom Compiler automatisch vorgenommenen Typkonvertierungen sind auch short, byte und char zulässig. Jedes Array hat eine Instanzvariable length, die die Anzahl seiner Elemente angibt. **/
		
		/** mehrdimensionale arrays **/
		int[][] a = new int[2][3];
		a[0][0] = 1;
		a[0][1] = 2;
		a[0][2] = 3;
		a[1][0] = 4;
		a[1][1] = 5;
		a[1][2] = 6;
		System.out.println(""+a[0][0]+a[0][1]+a[0][2]);
		System.out.println(""+a[1][0]+a[1][1]+a[1][2]);
		
		/** noch eine möglichkeit, mehrdimensionale arrays zu erzeugen und direkt bei der initialisierung mit werten zu versehen. **/
		int[][] array_cascade = {{0},
							 	{1,2},
							 	{3,4,5},
							 	{6,7,8,9}
					 			};
		 
		 for (int i=0; i<array_cascade.length; ++i)
		 {
			 for (int j=0; j<array_cascade[i].length; ++j)
			 {
				 System.out.print(array_cascade[i][j]);
			 }
			 
			 System.out.println();
		 }
	}
}